package com.gitee.yongzhuzl.commonutil.util.json;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONWriter;

import java.util.List;

/**
 * description: JSON工具类（基于com.alibaba.fastjson2）
 * @author 朱正磊
 * @date 2019-07-26 14:01:44
 */
public class Fastjson2Util {

    /**
     * description: java对象转json字符串
     * @author 朱正磊
     * @date 2019-07-26 14:34:31
     * @param object 待进行转换的java对象
     * @return 返回json字符串
     */
    public static String toString(Object object) {
        return JSON.toJSONString(object);
    }

    /**
     * description: java对象转json字符串（格式化）
     * @author 朱正磊
     * @date 2019-07-26 14:35:16
     * @param object 待进行转换的java对象
     * @return 返回json字符串
     */
    public static String toPrettyString(Object object) {
        return JSON.toJSONString(object, JSONWriter.Feature.PrettyFormat);
    }

    /**
     * description: 对JSON字符串进行JSON解析，解析成bean
     * @author 朱正磊
     * @date 2019-07-26 14:42:52
     * @param json 待解析的JSON字符串
     * @param clazz bean对应类的字节码
     * @return 返回解析结果
     * @param <T> 泛型
     */
    public static <T> T toBean(String json, Class<T> clazz) {
        return JSON.parseObject(json, clazz);
    }

    /**
     * description: 对JSON字符串进行JSON解析，解析成元素为bean的List集合
     * @author 朱正磊
     * @date 2019-07-26 14:43:01
     * @param json 待解析的JSON字符串
     * @param clazz bean对应类的字节码
     * @return 返回解析结果
     * @param <T> 泛型
     */
    public static <T> List<T> toList(String json, Class<T> clazz) {
        return JSON.parseArray(json, clazz);
    }

    /**
     * description: java对象转JSONObject
     * @author 朱正磊
     * @date 2019-07-26 14:50:54
     * @param object java对象
     * @return 返回JSONObject对象
     */
    public static JSONObject toJSONObject(Object object) {
        return (JSONObject) JSON.toJSON(object);
    }

    /**
     * description: java对象集合转JSONArray
     * @author 朱正磊
     * @date 2019-07-26 14:51:15
     * @param object java对象集合
     * @return 返回JSONArray对象
     */
    public static JSONArray toJSONArray(Object object) {
        return (JSONArray) JSON.toJSON(object);
    }

    /**
     * description: json字符串转JSONObject对象
     * @author 朱正磊
     * @date 2019-07-26 15:08:43
     * @param json json字符串
     * @return 返回JSONObject对象
     */
    public static JSONObject toJSONObject(String json) {
        return JSON.parseObject(json);
    }

    /**
     * description: json字符串转JSONArray对象
     * @author 朱正磊
     * @date 2019-07-26 15:08:50
     * @param json json字符串
     * @return 返回JSONArray对象
     */
    public static JSONArray toJSONArray(String json) {
        return JSON.parseArray(json);
    }

}
